/*****************************************************************************
  Copyright ?2002-2004 by Martin Cook. All rights are reserved. If you like
  this code then feel free to go ahead and use it. The only thing I ask is 
  that you don't remove or alter my copyright notice. Your use of this 
  software is entirely at your own risk. I make no claims about the 
  reliability or fitness of this code for any particular purpose. If you 
  make changes or additions to this code then please clearly mark your code 
  as yours. If you have questions or comments then please contact me at: 
  martin@codegator.com
  
  Have Fun! :o)
*****************************************************************************/

using System;
using System.Data;

namespace CG.Security.Data
{

	/// <summary>
	/// Data access operations for associations between users and rights.
	/// </summary>
	public interface IUserRightData
	{
		
		/// <summary>
		/// Creates a new association between a user and a right.
		/// </summary>
		/// <param name="userID">The identifier for the user.</param>
		/// <param name="rightID">The identifier for the right.</param>
		/// <param name="enableFlag">A flag that decides whether to add
		/// or remove the specified right from the effective rights list.</param>
		void Create(
			int userID,
			int rightID,
			bool enableFlag
			);

		// ******************************************************************

		/// <summary>
		/// Deletes an association between a user and a right.
		/// </summary>
		/// <param name="userID">The identifier for the user.</param>
		/// <param name="rightID">The identifier for the right.</param>
		void Delete(
			int userID,
			int rightID
			);

		// ******************************************************************

		/// <summary>
		/// Updates an association between a user and a right.
		/// </summary>
		/// <param name="userID">The identifier for the user.</param>
		/// <param name="rightID">The identifier for the right.</param>
		/// <param name="enableFlag">A flag that decides whether to add
		/// or remove the specified right from the effective rights list.</param>
		void Update(
			int userID,
			int rightID,
			bool enableFlag
			);

		// ******************************************************************

		/// <summary>
		/// Returns a list of all the rights that are explicitly associated 
		/// with the specified user. (Note: this list will not include any 
		/// rights granted through a users roles - for that list use the 
		/// SecurityManager.EffectiveRight method.
		/// </summary>
		/// <param name="userID">The identifier for the user.</param>
		/// <returns>A DataSet containing all the rights that are associated
		/// with the specified user.</returns>
		System.Data.DataSet FindByUser(
			int userID
			);

		// ******************************************************************

		/// <summary>
		/// Returns a list of all the users that have been explicitly associated 
		/// with the specified right.
		/// </summary>
		/// <param name="userID">The identifier for the right.</param>
		/// <returns>A DataSet containing all the users that are associated
		/// with the specified right.</returns>
		System.Data.DataSet FindByRight(
			int rightID
			);

	} // End IUserRightData

} // End namespace CG.Security.Data

